Mapped Types
TypeScript v2.1で追加された
その後のversionでも拡張が加えられている
型レベル関数
PR
handbook
用語など
{ [P in K]: T } と書いた場合に
P
parameter type
unionであるKの1つ1つに対し、propertyを作る感じになる
Pは、ここで定義される型変数
:の右側で使用できる
e.g. { [P in K]: T[P] }
K
constraint type
以下を満たす必要がある
string | number | symbolの部分型である
1個以上のunion型である
T
template type
type Element<P extends K> = T;と似ている
関連
Mapped Types Modifiers
?やreadonlyの付与や除去をする
Homomorphic Mapped Type
Mapped Tuple Type
関連2
keyof T
P in K
参考
Mapped Typesのあれこれ
#WIP
T[K]
Kは、K extends keyof Tを満たしている必要がある
code:TypeScript
type Person = { name: string; age: number; };
type A = Person'name'; // string
symbolを使った例
code:ts
const S = Symbol('S');
// { hoge: number, S: number }
type A = Record<'hoge' | typeof S, number>;
code:ts
// { hoge: number, x: symbol: number }
type A = Record<'hoge' | symbol, number>;
code:ts
const S = Symbol('S');
// { hoge: number, s: symbol: number }
type A = Record<'hoge' | typeof S | symbol, number>;
https://zenn.dev/qnighy/articles/dde3d980b5e386#property-signatureとindex-signatureの共存
なにが有益なのかわからん #??